import math  # 导入turtle图形库,以便使用turtle绘图
import time
import turtle  # 导入turtle图形库,以便使用turtle绘图

# 爱心
turtle.delay(0)


def heart(a=None):
    a.pensize(9)
    a.setheading(90)
    a.penup()
    a.color("deep pink")
    a.goto(-12, -135)
    a.pendown()
    a.begin_fill()
    a.fillcolor('deep pink')
    a.circle(9, 211)
    a.fd(9 * 2.4)
    a.lt(90)
    a.fd(9 * 2.4)
    a.circle(9, 211)
    a.end_fill()


# 头
def head(a=None):
    a.pensize(8)
    a.pencolor("black")
    a.penup()
    a.goto(-130, 170)
    a.pendown()
    a.setheading(220)
    for x in range(580):
        a.forward(1)
        if x < 250:
            a.left(0.5)
        elif x < 350:
            a.left(0.1)
        else:
            a.left(0.5)


# my_turtle = turtle.Turtle()
# head(my_turtle)
# turtle.done()


# 耳朵
def ears(a=None):
    a.setheading(70)
    for i in range(150):
        a.forward(1)
        if i < 80:
            a.left(0.2)
        elif i < 90:
            a.left(10)
        else:
            a.left(0.2)
        a.setheading(160)
    for i in range(140):
        a.forward(1)
        a.left(0.15)
        a.setheading(140)
    for i in range(157):
        a.forward(1)
        if i < 65:
            a.left(0.2)
        elif i < 75:
            a.left(8)
        else:
            a.left(0.5)


# 眼睛
def eyes(a=None):
    # 左眼
    a.pensize(5)
    a.penup()
    a.goto(-100, 60)
    a.setheading(350)
    a.pendown()
    a.fillcolor("black")
    a.begin_fill()
    step = 0.3
    for i in range(2):
        for j in range(60):
            if j < 30:
                step += 0.02
            else:
                step -= 0.02
            a.forward(step)
            a.left(3)
    a.end_fill()
    # 右眼
    a.penup()
    a.goto(50, 40)
    a.setheading(350)
    a.pendown()
    a.fillcolor("black")
    a.begin_fill()
    step = 0.3
    for i in range(2):
        for j in range(60):
            if j < 30:
                step += 0.02
            else:
                step -= 0.02
            a.forward(step)
            a.left(3)
    a.end_fill()


# 鼻子
def nose(e=None):
    e.penup()
    e.goto(-40, 30)
    e.setheading(260)
    e.pendown()
    e.fillcolor("#ebc80e")
    e.begin_fill()
    step = 0.3
    for i in range(2):
        for j in range(60):
            if j < 30:
                step += 0.02
            else:
                step -= 0.02
            e.forward(step)
            e.left(3)
    e.end_fill()


# 小花
def flower(n, f=None):
    for i in range(n):
        f.forward(0.5)
        if i < 80:
            f.left(1)
        elif i < 120:
            f.left(2.3)
        else:
            f.left(1)


# 花朵
def flowers(g=None):
    g.penup()
    g.goto(20, 180)
    g.pendown()
    g.fillcolor("#F6497F")
    g.begin_fill()
    g.setheading(175)
    flower(200, g)
    g.setheading(250)
    flower(200, g)
    g.setheading(325)
    flower(200, g)
    g.setheading(40)
    flower(200, g)
    g.setheading(115)
    flower(170, g)
    g.end_fill()
    g.penup()
    g.goto(30, 180)
    g.setheading(270)
    g.pendown()
    g.fillcolor("#e7be04")
    g.begin_fill()
    g.circle(10)
    g.end_fill()


# 胡须
def beard(h=None):
    h.penup()
    h.goto(-150, 65)
    h.pendown()
    h.setheading(170)
    h.pensize(6)
    for y in range(40):
        h.forward(1)
        h.left(0.3)
    h.penup()
    h.goto(-150, 85)
    h.pendown()
    h.setheading(160)
    for y in range(50):
        h.forward(1)
        h.left(0.3)
    h.penup()
    h.goto(-150, 45)
    h.pendown()
    h.setheading(180)
    for y in range(55):
        h.forward(1)
        h.left(0.3)
    h.penup()
    h.goto(110, 10)
    h.setheading(340)
    h.pendown()
    for y in range(40):
        h.forward(1)
        h.right(0.3)
        h.penup()
        h.goto(120, 30)
        h.setheading(350)
        h.pendown()
    for y in range(30):
        h.forward(1)
        h.right(0.3)
        h.penup()
        h.goto(115, 50)
        h.setheading(360)
        h.pendown()
    for y in range(50):
        h.forward(1)
        h.right(0.3)


def myarc(i, r, angle, step_length=None):
    length = 2 * math.pi * r * angle / 360  # angle角度的扇形的弧
    n = int(length / 3) + 1  # 线段条数
    length / n
    step_angle = angle / n  # 每条线段的角度
    polyline(i, n, step_length, step_angle)


def polyline(j, n, length, angle):
    for index in range(n):
        j.fd(length)
        j.lt(angle)


# 身体
def body(k=None):
    k.pensize(8)
    k.penup()
    k.goto(-100, -30)
    k.setheading(230)
    k.pendown()
    k.fillcolor("#efa9c1")
    k.begin_fill()
    for z in range(140):
        k.forward(1)
        k.left(0.2)
    k.setheading(340)
    for z in range(200):
        k.forward(1)
        k.left(0.1)
    k.setheading(85)
    for z in range(140):
        k.forward(1)
        k.left(0.1)
    k.end_fill()
    k.penup()
    k.goto(-73, -33)
    k.pendown()
    k.setheading(250)
    k.fillcolor("#da4b76")
    k.begin_fill()
    myarc(k, 40, 205, 1)   # TODO 缺少参数
    k.setheading(170)
    k.pensize(6)
    k.forward(75)
    k.end_fill()
    # 左胳膊
    k.pensize(8)
    k.penup()
    k.goto(-120, -17)
    k.setheading(230)
    k.pendown()
    k.fillcolor("#d64b75")
    k.begin_fill()
    k.forward(50)
    k.setheading(320)
    for i in range(27):
        k.forward(1)
        k.left(1)
        k.setheading(55)
    for j in range(50):
        k.forward(1)
        k.right(0.1)
    k.end_fill()
    # 左手
    k.penup()
    k.goto(-125, -15)
    k.setheading(140)
    k.pendown()
    k.fillcolor("white")
    k.begin_fill()
    k.forward(8)
    k.setheading(50)
    myarc(k, 10, 190, 1)       # TODO 缺少参数
    k.setheading(150)
    for j in range(80):
        k.forward(1)
        k.left(2.2)
    k.forward(24)
    k.end_fill()
    # 右胳膊
    k.penup()
    k.goto(27, -45)
    k.pendown()
    k.fillcolor("#db4e79")
    k.setheading(350)
    k.begin_fill()
    for x in range(50):
        k.forward(1)
        k.right(1)
    k.setheading(220)
    k.forward(40)
    k.setheading(100)
    for x in range(50):
        k.forward(1)
        k.left(0.2)
    k.end_fill()
    # 右手
    k.penup()
    k.goto(70, -75)
    k.pendown()
    k.fillcolor("pink")
    k.begin_fill()
    k.setheading(300)
    k.forward(8)
    k.setheading(30)
    for x in range(40):
        k.forward(1)
        k.right(5)
    k.setheading(280)
    for x in range(70):
        k.forward(1)
        k.right(2)
    # 右脚
    k.penup()
    k.goto(-70, -180)
    k.pendown()
    k.setheading(250)
    for x in range(30):
        k.forward(1)
        k.left(0.3)
    for x in range(160):
        k.forward(1)
        if x < 30:
            k.left(3)
        elif x < 65:
            k.left(0.1)
        else:
            k.left(1)
    # 左脚
    k.penup()
    k.goto(-150, -210)
    k.setheading(340)
    k.pendown()
    k.fillcolor("pink")
    k.begin_fill()
    step = 1.5
    for i in range(2):
        for j in range(60):
            if j < 30:
                step += 0.1
            else:
                step -= 0.1
            k.forward(step)
            k.left(3)
    k.end_fill()


# 主函数
turtle.setup(1.0, 1.0)  # 后续再添加你的其他turtle相关代码
turtle.title("hellokitty!")
turtle.bgcolor("white")
t = turtle.Turtle()
t.hideturtle()
t.speed(0)
head(t)
ears(t)
eyes(t)
nose(t)
beard(t)
flowers(t)
body(t)
heart(t)
turtle.mainloop()
